home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / ewl / ewl_tree2.h < prev    next >
C/C++ Source or Header  |  2006-01-09  |  6KB  |  198 lines

  1. #ifndef _EWL_TREE2_H
  2. #define _EWL_TREE2_H
  3.  
  4. /**
  5.  * @file ewl_tree.h
  6.  * @defgroup Ewl_Tree Tree: A Widget for List or Tree Layout
  7.  * @brief Defines a widget for laying out other widgets in a tree or list
  8.  * like manner. This also fulfills the functionality often seen in a table
  9.  * widget.
  10.  *
  11.  * Model:
  12.  * Defines communication callbacks for views and controllers. Query row/column
  13.  * data, indicate expansion points, notify views and controllers of changes,
  14.  * trigger sorting on a row/column combination.
  15.  *
  16.  * Data:
  17.  * Provides a wrapper to the data which allows for observer registration and a
  18.  * reference to a model for data access.
  19.  *
  20.  * View:
  21.  * Defines the callbacks for setting up the widgets based on the data returned
  22.  * from the Model. Create widgets, set data on widgets, calculate sizing,
  23.  * minimize number of widgets.
  24.  *
  25.  * Controller:
  26.  * The tree defines the entire controller and registers with the model.
  27.  * Provides controls to sort columns, expand/collapse branching points, reacts
  28.  * to changes from data model.
  29.  *
  30.  * Simple case:
  31.  * Widgets packed using standard container functions. This should result in a
  32.  * simple list of packed widgets.
  33.  *
  34.  * Features:
  35.  * * Default data provider, so standard container functions are supported.
  36.  * * MVC pattern of data access for more powerful layouts.
  37.  * * Packing of arbitrary widget types in cells.
  38.  * * Theming based on repeating row counts.
  39.  * * Number of columns dependant on number of providers, not a fixed number.
  40.  * * When using data providers, can reap widgets to save memory and decrease
  41.  *   layout time.
  42.  *
  43.  * Issues:
  44.  * * How do we support click callbacks on full rows? Special notifier
  45.  *   necessary? Proposal: Tree value change callback on row selection. Passes
  46.  *   event structure with array of selected row numbers. Simple case handled
  47.  *   by callback on packed widgets.
  48.  * * Column or row layout? Column allows for redirecting to a container to
  49.  *   handle the case of container functions used to add widgets and to use a
  50.  *   fixed number of rows in display region. It would also allow for skipping
  51.  *   configure of an entire off-screen column, rows would lay out the cells
  52.  *   off-screen. How do we implement column layout? Proposal: Row height
  53.  *   cache, easy for fixed height rows, more complex for variable height.
  54.  *
  55.  * @{
  56.  */
  57.  
  58. /**
  59.  * @themekey /tree/file
  60.  * @themekey /tree/group
  61.  */
  62.  
  63. typedef void *(*Ewl_Model_Fetch)(void *data, int row, int column);
  64.  
  65. #define EWL_MODEL_DATA_GET(f) ((Ewl_Model_Fetch *)f)
  66.  
  67. typedef int (*Ewl_Model_Sort)(void *data, int column);
  68.  
  69. #define EWL_MODEL_DATA_SORT(f) ((Ewl_Model_Sort *)f)
  70.  
  71. typedef int (*Ewl_Model_Count)(void *data);
  72.  
  73. #define EWL_MODEL_DATA_COUNT(f) ((Ewl_Model_Count *)f)
  74.  
  75. /**
  76.  * @def EWL_MODEL(model)
  77.  * Typecasts a pointer to an Ewl_Model pointer.
  78.  */
  79. #define EWL_MODEL(model) ((Ewl_Model *)model)
  80.  
  81. typedef struct Ewl_Model Ewl_Model;
  82.  
  83. struct Ewl_Model
  84. {
  85.     Ewl_Model_Fetch  fetch;    /**< Retrieve data for a cell */
  86.     Ewl_Model_Fetch  subfetch; /**< Check for subdata */
  87.     Ewl_Model_Sort   sort;     /**< Trigger sort on column */
  88.     Ewl_Model_Count  count;    /**< Count of data items */
  89. };
  90.  
  91. typedef int (*Ewl_View_Constructor)(void *data);
  92.  
  93. #define EWL_VIEW_CONSTRUCTOR(f) ((Ewl_View_Constructor *)f)
  94.  
  95. typedef int (*Ewl_View_Assign)(Ewl_Widget *w, void *data);
  96.  
  97. #define EWL_VIEW_ASSIGN(f) ((Ewl_View_Assign *)f)
  98.  
  99. /**
  100.  * @def EWL_VIEW(view)
  101.  * Typecasts a pointer to an Ewl_View pointer.
  102.  */
  103. #define EWL_VIEW(view) ((Ewl_View *)view)
  104.  
  105. typedef struct Ewl_View Ewl_View;
  106.  
  107. struct Ewl_View
  108. {
  109.     Ewl_View_Constructor construct;     /**< Create a widget for display */
  110.     Ewl_View_Assign assign;             /**< Assign data to a widget */
  111. };
  112.  
  113. typedef struct Ewl_Tree2 Ewl_Tree2;
  114.  
  115. /**
  116.  * @def EWL_TREE2(t)
  117.  * Typecasts a pointer to an Ewl_Tree pointer.
  118.  */
  119. #define EWL_TREE2(t) ((Ewl_Tree2 *)t)
  120.  
  121. /**
  122.  * @struct Ewl_Tree
  123.  * The tree is a columnar listing, where items in the list may be nested
  124.  * below other items.
  125.  */
  126. struct Ewl_Tree2
  127. {
  128.     Ewl_Container container; /**< Inherit from container. */
  129.  
  130.     Ewl_Model *models;       /**< Data models for the tree columns. */
  131.  
  132.     void *data;              /**< Data provided to the tree */
  133.     int *rowcache;           /**< Cache of row sizes */
  134.     int fixed;               /**< Rows are fixed height */
  135. };
  136.  
  137. /*
  138.  * Tree view/controller manipulation
  139.  */
  140. Ewl_Widget     *ewl_tree2_new(void);
  141. int          ewl_tree2_init(Ewl_Tree2 *tree);
  142.  
  143. void             ewl_tree2_data_set(Ewl_Tree2 *m, void *data);
  144. void            *ewl_tree2_data_get(Ewl_Tree2 *m);
  145.  
  146. void             ewl_tree2_column_append(Ewl_Tree2 *t, Ewl_Model *m, Ewl_View *v);
  147. void             ewl_tree2_column_prepend(Ewl_Tree2 *t, Ewl_Model *m, Ewl_View *v);
  148. void             ewl_tree2_column_remove(Ewl_Tree2 *t, Ewl_Model *m, Ewl_View *v);
  149.  
  150. void         ewl_tree2_headers_visible_set(Ewl_Tree2 *tree,
  151.                            unsigned char visible);
  152. unsigned int     ewl_tree2_headers_visible_get(Ewl_Tree2 *tree);
  153.  
  154. Ecore_List     *ewl_tree2_selected_get(Ewl_Tree2 *tree);
  155. void          ewl_tree2_selected_clear(Ewl_Tree2 *tree);
  156.  
  157. Ewl_Tree_Mode      ewl_tree2_mode_get(Ewl_Tree2 *tree);
  158. void          ewl_tree2_mode_set(Ewl_Tree2 *tree, Ewl_Tree_Mode mode);
  159.  
  160. void             ewl_tree2_fixed_rows_set(Ewl_Tree2 *tree, int fixed);
  161. int              ewl_tree2_fixed_rows_get(Ewl_Tree2 *tree);
  162.  
  163. /*
  164.  * View manipulation
  165.  */
  166. Ewl_View            *ewl_view_new(void);
  167. int                  ewl_view_init(Ewl_View *view);
  168.  
  169. void                 ewl_view_constructor_set(Ewl_View *view, Ewl_View_Constructor construct);
  170. Ewl_View_Constructor ewl_view_constructor_get(Ewl_View *view);
  171.  
  172. void                 ewl_view_assign_set(Ewl_View *view, Ewl_View_Assign assign);
  173. Ewl_View_Assign      ewl_view_assign_get(Ewl_View *view);
  174.  
  175. /*
  176.  * Model manipulation.
  177.  */
  178. Ewl_Model     *ewl_model_new(void);
  179. int            ewl_model_init(Ewl_Model *model);
  180.  
  181. void             ewl_model_fetch_set(Ewl_Model *m, Ewl_Model_Fetch get);
  182. Ewl_Model_Fetch  ewl_model_fetch_get(Ewl_Model *m);
  183.  
  184. void             ewl_model_subfetch_set(Ewl_Model *m, Ewl_Model_Fetch get);
  185. Ewl_Model_Fetch  ewl_model_subfetch_get(Ewl_Model *m);
  186.  
  187. void             ewl_model_sort_set(Ewl_Model *m, Ewl_Model_Sort sort);
  188. Ewl_Model_Sort   ewl_model_sort_get(Ewl_Model *m);
  189.  
  190. void             ewl_model_count_set(Ewl_Model *m, Ewl_Model_Count count);
  191. Ewl_Model_Count  ewl_model_count_get(Ewl_Model *m);
  192.  
  193. /**
  194.  * @}
  195.  */
  196.  
  197. #endif
  198.